"""
公共类
"""
import os
import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
class FileHandler:

    # 获取当前Python脚本所在的目录路径
    @staticmethod
    def get_current_path():
        return os.path.dirname(os.path.abspath(__file__))
    # 传入json文件路径，返回DataFrame
    @staticmethod
    def json_to_df(json_path):
        try:
            return pd.read_json(json_path)
        except ValueError as e:
            return pd.DataFrame()

    # 判断文件夹是否存在，不存在则创建
    @staticmethod
    def create_folder_if_not_exists(folder_path):  # folder_path 文件夹路径
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)
    # 创建文件夹列表，如果文件夹不存在则创建
    @staticmethod
    def create_folderList_if_not_exists(folder_path_list):  # folder_path_list 文件夹路径列表
        for folder_path in folder_path_list:
            FileHandler.create_folder_if_not_exists(folder_path)
    # 显示消息
    @staticmethod
    def show_message(message, x):
        if x == 0:
            messagebox.showerror('错误提示', message)
        else:
            messagebox.showinfo('温馨提示', message)
    # 获取所选择的文件夹下所有的文件名的路径
    @staticmethod
    def get_file_path(dir):  # dir 文件夹路径
        file_paths = []
        for root, dirs, files in os.walk(dir):
            for file in files:
                file_path = os.path.join(root, file)
                file_paths.append(file_path)
        return file_paths
    # 获取指定工作薄中所有的sheet名,如果工作薄不存在返回空列表
    @staticmethod
    def get_workbook_sheets(excel_path):  # workbook 工作薄路径
        if os.path.exists(excel_path):
            return pd.ExcelFile(excel_path).sheet_names
        else:
            return []

# 截取国家代号
def cut_country_id(contract_no):
    if contract_no[3] == 'E' or contract_no[3] == 'D':
        return contract_no[4:7]
    else:
        return contract_no[3:6]

# 选择excel文件,返回文件路径,如果没有选择文件返回空字符串
@staticmethod
def select_file(prompt_message):  # prompt_message 提示信息
    root = tk.Tk()
    root.withdraw()
    root.attributes('-topmost', True) # 将窗口置顶
    return filedialog.askopenfilename(title=prompt_message, filetypes=[('Excel files', '*.xlsx')])




